﻿using System;
using System.IO;
using System.Reflection;
using System.Collections.Generic;
using InterfazOperacion;


namespace Proyecto_Tres
{
    class Cliente
    {
        private List<Operacion> ListaPlugins;

        public Cliente()
        {
            ListaPlugins = new List<Operacion>();
            this.CargarPlugins();
        }


        public void CargarPlugins()
        {
            ListaPlugins.Clear();
            String Path = AppDomain.CurrentDomain.BaseDirectory+"//DLLs"  ;

            foreach (string NombreArchivo in Directory.GetFiles(Path))
            {
                FileInfo file = new FileInfo(NombreArchivo);
                if (file.Extension.Equals(".dll") && !file.Name.Equals("InterfazOperacion.dll") )
                {
                    Assembly pluginAssembly = Assembly.LoadFrom(NombreArchivo);
                    foreach (Type pluginType in pluginAssembly.GetTypes())
                    {
                        if (pluginType.IsPublic && !pluginType.IsAbstract)
                        {
                            Type typeInterface = pluginType.GetInterface("InterfazOperacion.Operacion", true);
                            if (typeInterface != null)
                            {
                                Operacion unDll = (Operacion) Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString()));
                                ListaPlugins.Add((Operacion)unDll);
                            }
                        }
                    }
                }
            }
        }


        public List<Operacion> getPlugins()
        {
            return ListaPlugins;
        }
    }
}
